As the growth of virtual machines and containers continues, software developers (“developers”) have struggled to optimize the performance of virtual machines, containers, and applications. For example, a developer may unintentionally under provision a container because the demand for an application running on the container increases unexpectedly at peak hours to a level that a host virtual machine (“VM”) or container is not capable of effectively handling. Not capable of effectively handling means the container's processing power, memory, or input/output capability are too low for running an application and the application will likely crash or function poorly (e.g., frequent errors). If the peak demand continues to grow without the developer knowing, the growth exacerbates the under provisioning problem. Accordingly, although under provisioning can save resources such as memory and processing power, it can cause customer disappointment.
In contrast to under provisioning a container or VM, developers may overprovision a container or VM to handle a high workload during peak hours. Even though the peak workload may last only a few hours, the overprovisioned VM or overprovisioned container continues to run throughout the day, month, or even year. Such overprovisioned VMs and containers can generate more heat or deplete resources (e.g., processing power, memory, or other computer resources). Further, because costs for a VM or container are generally based on rental rates regardless of utilization, over provisioning increases cost for companies, developers, and even customers.
Additionally, although developers can include an auto-scaling feature that provisions a new VM or new container every time peak load increases, the size of a network can grow uncontrollably, which can be costly or even make the network underutilized outside of peak hours. Accordingly, a need exists to address these problems and provide additional benefits.
The drawings are not to scale. Some components or operations can be separated into different blocks or combined into a single block for the purposes of discussion for implementations of the disclosed technology.